<?php

namespace app\api\controller;

use app\common\controller\Api;
use app\common\model\ProductCategory;
use think\Db;
use think\Log;
use think\Exception;

/**
 * 首页接口
 */
class Index extends Api
{
    protected $noNeedLogin = ['*'];
    protected $noNeedRight = ['*'];

    /**
     * 首页
     *
     */
    public function index()
    {
        $this->success('请求成功');
    }

    public function getTypeData()
    {
        try{
           // 获取分类导航
            $type = $this->getType();
            
            return json([
                'code' => 1,
                'msg' => '获取成功',
                'data' => $type
            ]);
        }catch(\Exception $e){
            $this->error($e->getMessage());
        }
        
    }
    
    /**
     * 获取首页数据（包含分类导航和推荐商品）
     * @ApiMethod (GET)
     */
    public function getHomeData()
    {
        try {
            
            // 获取推荐商品
            $recommendProducts = $this->getRecommendProducts();
            
            return json([
                'code' => 1,
                'msg' => '获取成功',
                'data' => $recommendProducts
            ]);
            
        } catch (\Exception $e) {
            Log::error('获取首页数据失败: ' . $e->getMessage());
            return json(['code' => 0, 'msg' => '系统错误，请稍后重试', 'data' => []]);
        }
    }
    

    
    /**
     * 获取分类导航数据
     */
    private function getType()
    {
        // 获取所有启用的商品分类
        $categories = Db::name('content')
            ->where('status', 'normal')
            ->field('id,name,image,description')
            ->order('id asc')
            ->limit(10)
            ->select();
            
        // 处理图片路径
        foreach ($categories as &$category) {
            if (isset($category['image']) && $category['image']) {
                // 检查是否为相对路径，如果是则添加域名
                if (strpos($category['image'], 'http') !== 0 && strpos($category['image'], '//') !== 0) {
                    $category['image'] = request()->domain() . $category['image'];
                }
            }
        }
        
        return $categories;
    }
    
    /**
     * 获取推荐商品数据（只返回权益商品）
     */
    private function getRecommendProducts()
    {
        // 查询有权益商品属性价格的商品ID列表
        $productIds = Db::name('product_attribute_price')
            ->where('attribute_type', 1) // 权益商品类型
            ->where('status', 1) // 启用状态
            ->field('product_id')
            ->group('product_id')
            ->column('product_id');
        
        // 如果没有权益商品，返回空数组
        if (empty($productIds)) {
            return [];
        }
        
        // 获取权益商品列表
        $products = Db::name('product')
            ->where('id', 'in', $productIds)
            ->where('audit_status', 1) // 审核通过
            ->where('shelf_status', 1) // 已上架
            ->field('id,name,main_image,price,market_price,sales')
            ->order('sales desc, sort desc') // 按销量和权重排序
            ->limit(10)
            ->select();
        
        // 处理图片路径和价格
        foreach ($products as &$product) {
            // 处理图片路径，确保完整URL
            if (isset($product['main_image']) && $product['main_image']) {
                if (strpos($product['main_image'], 'http') !== 0 && strpos($product['main_image'], '//') !== 0) {
                    $product['main_image'] = request()->domain() . $product['main_image'];
                }
            }
            
            // 获取权益商品价格
            $equityPrice = Db::name('product_attribute_price')
                ->where('product_id', $product['id'])
                ->where('attribute_type', 1) // 权益商品类型
                ->field('price')
                ->find();
            
            // 设置权益价格
            if ($equityPrice) {
                $product['price'] = $equityPrice['price'];
                $product['equity_price'] = $equityPrice['price'];
            }
            
            // 格式化价格
            $product['price'] = number_format($product['price'], 2);
            $product['market_price'] = number_format($product['market_price'], 2);
            if (isset($product['equity_price'])) {
                $product['equity_price'] = number_format($product['equity_price'], 2);
            }
        }
        
        return $products;
    }
}
